package demo07;

/*
 * 向上转型一定是安全的，但是有一个弊端：
 * 对象一旦向上转型为父类，就无法调用子类原本特有的内容
 * 
 * 解决方案：用对象的向下转型【还原】
 */
public class Demo01Multi {
    public static void main(String[] args) {
        // 对象的向上转型，就是父类引用指向子类对象
        Animal animal = new Cat();
        animal.eat(); // 猫吃鱼

        // animal.catchMouse(); // 错误写法！向上转型无法访问到子类特有方法

        // 向下转型，进行“还原”动作
        Cat cat = (Cat) animal;
        cat.catchMouse(); // 猫抓老鼠

        // 错误的向下转型：本来new的时候是一只猫，现在强行当成狗
        // 造成运行时类转换异常ClassCastException
        // Dog dog = (Dog) animal; // 错误写法！编译不会报错，但运行会出现异常
    }
}
